/// 1. Rust中每一个引用都有其生命周期，也就是引用保持有效的作用域，大部份时候生命周期是隐含并可以推断的
/// 正如大部份时候类型可以推断一样
/// 2. 生命周期的主要目标是避免悬垂引用
/// 3. Rust编译器使用借用检查器来检查生命周期
fn main() {
    let r;
    {
        let x = 5;
        r = &x;
    }
    // println!("r = {}", r); // 这里会报错，会出现悬垂引用，因为在第9行后释放了x，导致生命周期存活不够久

    let r1;
    let x = 5;
    r1 = x;
    println!("r1 = {}", r1);
    println!("x = {}", x);
}
